#!/usr/bin/env python3

def print_arr_n_elements_per_row(arr:list, n:int):
  '''
  以每行n个元素的形式打印数组
  '''
  for i, ele in enumerate(arr):
    print("|0x%x" % ele, end="")
    if 0 == (i+1)%n :
      print("|")

def create_arithmetic_progression(first_element, length, step=1) -> list:
  '''
  创建一个等差数列( 首元素, 元素个数, 步长)
  '''
  return list(range(first_element, first_element+length*step, step))



print("\n\n", "-"*50, "\n 页目录表,只要前256个页目录项\n", "-"*50)
# 页目录表和页表都占一个物理页, 物理页都是4KB对齐,所以低12位一定为0. 
# 因此页目录项或页表项都是高20位存物理页的地址,低12位存该物理页属性
# 第一个页表的首地址是0x101000, 属性是7, 所以从下面从0x101007开始创建数组
page_directory_table = create_arithmetic_progression(0x101007, 256, 0x1000)
print_arr_n_elements_per_row(page_directory_table, 16)


print("\n\n", "-"*50, "\n 页表一, 只要前256个页表项\n", "-"*50)
page_table = create_arithmetic_progression(0x7, 256, 0x1000)
print_arr_n_elements_per_row(page_table, 16)
